package XZK010103AND002;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

/**
 * 流程控制的逻辑训练任务（分支+循环综合）
 *
 * @author bing.z 2021/5/26 21:57
 **/
public class Demo1 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        /**
         * 1、计算应缴金额
         * 商场根据会员积分打折：
         * 2000 分以内打 9 折，
         * 4000 分以内打 8 折，
         * 8000 分以内打 7.5 折，
         * 8000 分以上打 7 折， 使用 if-else-if 结构，实现手动输入购物金额和积
         * 分，计算出应缴金额
         */
        System.out.println();
        System.out.println("请输入购物金额及积分：");
        double price = in.nextInt();
        int value = in.nextInt();
        if (value >= 8000) {
            price *= 0.7;
        } else if (value >= 4000) {
            price *= 0.75;
        } else if (value >= 2000) {
            price *= 0.8;
        } else {
            price *= 0.9;
        }
        System.out.println("应付金额：" + price);
        System.out.println();

        /**
         * 2、计算该年该月天数
         * 一年中有 12 个月，而每个月的天数是不一样的。其中大月 31 天，分别为
         * 1,3,5,7,8,10,12 月，小月 30 天，分别 为 4,6,9,11 月。还有二月比较特殊，平
         * 年的二月只有 28 天，而闰年的二月有 29 天，由用户在控制台输入年月日，
         * 程序计算输入的日期是当年的第多少天。 （例如输入 2000 年 12 月 31 日，
         * 应该输出是第 366 天）。
         *
         * 下列输入格式为 xxxx xx xx：2000 12 31
         */
        System.out.println();
        int year = in.nextInt();
        int month = in.nextInt();
        int day = in.nextInt();
        Set<Integer> bigMonthSet = new HashSet<>();
        Set<Integer> smallMonthSet = new HashSet<>();
        bigMonthSet.addAll(Arrays.asList(1, 3, 5, 7, 8, 10, 12));
        smallMonthSet.addAll(Arrays.asList(4, 6, 9, 11));
        int nowDay = 0;
        if (month == 1) {
            nowDay = day;
        } else {
            for (int m = 1; m < month; m++) {
                if (m == 2) {
                    if (judgeYear(year)) {
                        nowDay += 29;
                    } else {
                        nowDay += 28;
                    }
                } else if (bigMonthSet.contains(m)) {
                    nowDay += 31;
                } else if (smallMonthSet.contains(m)) {
                    nowDay += 30;
                }
            }
            nowDay += day;
        }
        System.out.println("今日是第 " + nowDay + " 天");
        System.out.println();

        /**
         * 3、图形打印任务
         */
        // 图形1
        System.out.println();
        for (int i=1; i<=5; i++) {
            for (int j=0; j<i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println();
        // 图形 2
        System.out.println();
        for (int i=0; i<5; i++) {
            for (int j=0; j<(5-i); j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println();
        // 图形 3
        System.out.println();
        for (int i=0; i<5; i++) {
            for (int j=4-i; j>0; j--) {
                System.out.print(" ");
            }
            for (int j=0; j<i*2+1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println();

        /**
         * 打印九九乘法表
         */
        System.out.println("乘法口诀表：");
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i * j + "\t");
            }
            System.out.println();
        }
        System.out.println();

        /**
         * 打印三位数中的所有水仙花数
         * 所谓“水仙花数”即一个整数满足其值等于各个数位的立方和。
         * 如: 153 是一个水仙花数，因为 153= 1³+5³+3³
         */
        for (int v=100; v<1000; v++) {
            int a = v%10, b = v/10%10, c = v/100%10;
            if (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == v) {
                System.out.println(v);
            }
        }
    }

    public static boolean judgeYear(int year) {
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            return true;
        }
        return false;
    }
}
